home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / t_os / tie / src / mos.c < prev    next >
C/C++ Source or Header  |  1991-10-18  |  2KB  |  106 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define TRUE    1
  5. #define FALSE   0
  6. #define ERROR (-1)
  7.  
  8. typedef unsigned char   u_char ;
  9. typedef struct
  10. {
  11.     u_char  p[ 64 ][ 4 ] ;
  12. } data ;
  13.  
  14. extern  int     dump( int num, data buf[] ) ;
  15.  
  16.  
  17. void    main( int argc, char *argv[] )
  18. {
  19.     FILE    *fp ;
  20.     char    *path ;
  21.     data    buf[2] ;
  22.     int     i ;
  23.  
  24.     if( argc == 1 )
  25.         path = "moscsr.icn" ;
  26.     else
  27.         path = argv[ 1 ] ;
  28.  
  29.     if( ( fp = fopen( path, "rb" ) ) == NULL )
  30.     {
  31.         puts( "can't open" ) ;
  32.         exit( 1 ) ;
  33.     }
  34.  
  35.     for( i = 0 ; i < 64 ; i ++ )
  36.     {
  37.         fread( (char *)buf, 1, 512, fp ) ;
  38.  
  39.         if( dump( i, buf ) == ERROR )
  40.             break ;
  41.     }
  42.     fclose( fp ) ;
  43. }
  44.  
  45. static  int     dump( int num, data buf[] )
  46. {
  47.     int     i, j, k, pack ;
  48.     int     x = -1, y = -1, lf = FALSE ;
  49.     data    *p ;
  50.     u_char  cmp[2] = { '\0', '\xFF' } ;
  51.  
  52.     for( i = 0 ; i < 2 ; i ++ )
  53.     {
  54.         p = &buf[ i ] ;
  55.  
  56.         for( j = 0 ; j < 32 ; j ++ )
  57.         {
  58.             for( k = 0 ; k < 4 ; k ++ )
  59.             {
  60.                 if( p -> p[j][k] != cmp[i] )
  61.                 {
  62.                     if( x < k ) x = k ;
  63.                     if( y < j ) y = j ;
  64.                 }
  65.             }
  66.         }
  67.         if( x == -1 && y == -1 )
  68.             return( ERROR ) ;
  69.     }
  70.  
  71.     printf( "    { 0,0, %d,%d,              /*  %03d   */\n", x+1, y+1, num ) ;
  72.  
  73.     switch( x )
  74.     {
  75.         case 0: pack = 10 ; break ;
  76.         case 1: pack = 6 ;  break ;
  77.         case 2: pack = 4 ;  break ;
  78.         case 3: pack = 3 ;  break ;
  79.     }
  80.  
  81.     for( i = 0 ; i < 2 ; i ++ )
  82.     {
  83.         p = &buf[ i ] ;
  84.         lf = TRUE ;
  85.  
  86.         for( j = 0 ; j <= y ; j ++ )
  87.         {
  88.             printf( lf == TRUE ? "    " : "  " ) ;
  89.             lf = FALSE ;
  90.  
  91.             for( k = 0 ; k <= x ; k ++ )
  92.                 printf( "0x%02X,", p -> p[j][k] ) ;
  93.  
  94.             if( j % pack == pack-1 )
  95.                 lf = TRUE, printf( "\n" ) ;
  96.         }
  97.         if( i == 1 )
  98.             printf( " }," ) ;
  99.         if( lf != TRUE )
  100.             printf( "\n" ) ;
  101.     }
  102.     printf( "\n" ) ;
  103.  
  104.     return( ERROR+1 ) ;
  105. }
  106.